package util;

import java.util.Arrays;
import java.util.List;

/**
 * Arrays测试
 */
public class ArraysUtils {
    public static void main(String[] args) {
//        newArrayList();
//        sort();
        copyOf();
    }

    /**
     * 数组元素复制
     */
    private static void copyOf() {
        Integer[] data1 = {1, 2, 3, 4};
        Integer[] data2 = Arrays.copyOf(data1, 2);
        System.out.println(Arrays.toString(data2)); // [1, 2]
        Integer[] data3 = Arrays.copyOf(data1, 5);
        System.out.println(Arrays.toString(data3)); // [1, 2, 3, 4, null]
    }

    /**
     * 将数组中的元素进行排序，如果是对象排序，对象需要实现Comparable接口
     * 也可以在排序时自定义排序规则
     */
    private static void sort() {
        final int[] ints = {2, 4, 1, 3};
        final Integer[] ints1 = {2, 4, 1, 3};
        Arrays.sort(ints);
        Arrays.sort(ints1, (o1, o2) -> o2 - o1);
        System.out.println("ints = " + Arrays.toString(ints));
        System.out.println("ints1 = " + Arrays.toString(ints1));

        final String[] strings = {"2", "4", "1", "3"};
//        Arrays.sort(strings);
        Arrays.parallelSort(strings); // 数据量较大时用该方法实现并行排序
        System.out.println("strings = " + Arrays.toString(strings));

    }

    /**
     * 该方法返回的是Arrays内部静态类ArrayList，而不是我们平常使用的ArrayList,
     * 该静态类ArrayList没有覆盖父类的add, remove等方法，所以如果直接调用，会报UnsupportedOperationException异常
     * 该方法的作用主要是当做容器
     */
    private static void newArrayList() {
        final List<Integer> list = Arrays.asList(1, 2, 3);
        System.out.println(list);
    }
}
